-- UIDungeonGuideMgr
-- Created by zouyb
-- 迷宫内引导管理模块

-- 触发器
local guideTriggers;

-- 动作
local guideActions; 

-- 后置函数
local postFuncs;

UIDungeonGuideMgr = class("UIDungeonGuideMgr", function()
    return {};
end);

function UIDungeonGuideMgr.create()
    return UIDungeonGuideMgr.new();
end

-- 构造函数
function UIDungeonGuideMgr:ctor()
	self:init();
end

-- 初始化
function UIDungeonGuideMgr:init()
    guideTriggers = LOAD_PATH("game/ui/guide/trigger");
    guideActions = LOAD_PATH("game/ui/guide/action");
    postFuncs = LOAD_PATH("game/ui/guide/post_func");
    
    ME.user.dbase:removeCb("DungeonGuideM", { "dungeon_guide_progress", });
    ME.user.dbase:registerCb("DungeonGuideM", { "dungeon_guide_progress", }, function()
        DungeonGuideM.restoreGuideProgress();
    end);      
    
    -- 还原之前的引导进度
    DungeonGuideM.restoreGuideProgress();    
end

-- 开始引导
function UIDungeonGuideMgr:start()
    -- 开始引导
    self:runNext();
end

-- 运行下一个引导
function UIDungeonGuideMgr:runNext()
    -- 当前引导ID （之前运行的引导ID）
    local curGuideId = DungeonGuideM.getCurGuideId();
    
    -- 获取下一个引导ID （马上要运行的引导ID）
    local nextGuideId = DungeonGuideM.getNextGuideId(curGuideId);
    if nextGuideId == nil then
        return;
    end

    -- 删除该引导的触发器
    local triggerConfig = DungeonGuideM.query(nextGuideId, "trigger");
    if triggerConfig ~= nil then
        local trigger = guideTriggers[string.trim(triggerConfig.name)];
        if trigger ~= nil then
            trigger.unRegister(triggerConfig);
        end
    end    

    -- 获取该引导的动作
    local actionName = DungeonGuideM.query(nextGuideId, "action");
    if actionName == nil then
        return;
    end
    
    local action = guideActions[string.trim(actionName)];
    if action then
        -- 运行该引导动作 
        action.run(nextGuideId);      
        
        -- 执行后置函数
        local postFuncConfig = DungeonGuideM.query(nextGuideId, "post_func");
        if postFuncConfig ~= nil then
            local postFunc = postFuncs[string.trim(postFuncConfig.name)];
            if postFunc then
                print("执行后置函数:"..postFuncConfig.name, ", 参数："..postFuncConfig.para);
                postFunc.run(postFuncConfig.para);
            end
        end
        
        -- 刷新当前引导ID
        DungeonGuideM.setCurGuideId(nextGuideId);
        
        -- 是否需要保存进度
        local saveProgress = DungeonGuideM.query(nextGuideId, "save_progress");
        -- 保存上下文
        if saveProgress == 1 then
            print("保存新手关卡引导进度："..nextGuideId);
        
            -- 保存进度
            DungeonActionM.go("save_guide_progress", 0, DungeonGuideM.getCurGuideId());
            
            -- 保存地牢上下文
            DungeonActionM.go("save_dungeon");
        end
        
        -- 注册下下一个引导的触发器
        local nextNextGuideId = DungeonGuideM.getNextGuideId(nextGuideId);
        local triggerConfig = DungeonGuideM.query(nextNextGuideId, "trigger");
        if triggerConfig ~= nil then
            local trigger = guideTriggers[string.trim(triggerConfig.name)];
            if trigger ~= nil then
                print("trigger register:" .. triggerConfig.name .. ", id:" .. nextNextGuideId);
                trigger.register(triggerConfig);
            end
        end
    end
end


